﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson7 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 DrawCall的概念
        //字面理解DrawCall就是绘制呼叫的意思表示 CPU(中央处理器）通知GPU(图形处理器-显冷
        //DrawCall概念
        //就是CPU(处理器)准备好渲染数据(顶点，纹理，法线，Shader等等)后
        //告知GPU(图形处理器-显卡)开始渲染（将命令放入命令缓冲区)的命令
        //简单来说:一次DrawCall就是P准备好渲染数据通知GPu渲染的这个过程
        //如果游戏中Drawcall数量较高会影响CPU的效率
        //最直接的感受就是游戏会卡顿
        //举例说明以拷贝文件来进行类比
        //假设我们创建10000个小文件，每个文件大小为1kb，然后把这些文件拷贝到另一个文件夹中//你会发现，即使这些问价加起来不超过12MB，但是拷贝花费的时间是很长的
        //如果我们单独创建1个12MB的文件拷贝到另一个文件夹，基本可以瞬间拷贝完毕
        //为什么会这样呢?
        //因为每一个文件赋值动作都需要很多额外的操作，比如分配内存，创建数据等等

        //这些操作就会带来—些额外的性能开销
        //简单理解文件越多额外开销就越大

        //渲染过程和上面的例子很类似，每次DrawCall，CPu都需要准备很多数据发送给GPuU
        //那么如果DrawCall越多那么额外开销就越大，其实GPu的渲染效率是很强大的，往往影响渲染效率的
        //都是因为CPU提交命令的速度
        //如果DrawCall太多CPU就会把大量时间画在提交DrawCall上 造成CPU过载，游戏卡顿
        #endregion

        #region 知识点二 如何降低DrawCall数量
        //在UI层面上
        //小图合大图->即多个小DrawCall变一次大DrawCall
        #endregion

        #region 知识点三 制作UI时降低DrawCall的技巧
        //1.通过NGUI Panel上提供的DrawCall查看工具
        //2.注意不同图集之间的层级关系(层级不同也会占用一次DrawCall)
        //3.注意Label的层级关系

        //注意事项：
        //1、同一图集的资源应当设置为同一层级
        //2、当存在多个图集使用同一个资源时，可以考虑将使用的资源打到多个图集中，以空间换时间
        #endregion

    }
}
